import base64
import json
import pickle
import django_redis
class Base(object):
    def bsecret(self,data):
        data = base64.b64encode(pickle.dumps(data))
        return data
    def unbsecret(self,data):
        data = pickle.loads(base64.b64decode(data))
        return data

# 购物车的合并
def merge_cart_cookie_to_redis(request,user,response):
    """
    1.获取到cookie里面的carts
    2.链接redis数据库,使用updata覆盖redis中的对应的数据但是如果redis中没有数据则新增
    3.删除cookie
    """
    # 1.获取carts的数据
    cookie_ob = request.COOKIES.get("carts")
    if cookie_ob:
        cookie_dict = Base().unbsecret(cookie_ob)
    else:
        return response
    # 2.链接数据库,判断redis库中有无数据,有的话就覆盖,没有则新建
    redis_ob = django_redis.get_redis_connection("carts")
    redis_dict = redis_ob.hgetall(user.id)
    if redis_dict :
        redis_dict1 = {data[0].decode():json.loads(data[1].decode()) for data in redis_dict.items()}
        # 2.1 使用update更新将cookie中的数据覆盖到redis中
        redis_dict1.update(cookie_dict)
        for data in redis_dict1.items():
            redis_ob.hset(user.id, data[0], json.dumps(data[1]))
    else:
        for data in cookie_dict.items():
            redis_ob.hset(user.id,data[0],json.dumps(data[1]))
    # 3.删除cookie中的carts的数据
    response.delete_cookie("carts")
    return response

